home *** CD-ROM | disk | FTP | other *** search
/ START Magazine / START VOL 3 NO 7.st / VCR_ORG.ARC / REC_MOD.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-11-11  |  20.7 KB  |  752 lines

  1. {$M+}
  2. {$E+}
  3.  
  4. program Search_Module;
  5.  
  6. {$I A:GEMSUBS.PAS }
  7. {$I A:AUXSUBS.PAS }
  8.  
  9.   Const
  10.        {$I B:VCR_Cnst.Pas }
  11.  
  12.   Type
  13.        {$I B:VCR_Type.Pas }
  14.  
  15.   Var
  16.        {$I B:VCR_Var.Pas }
  17.  
  18.  
  19.  
  20.  procedure DateStr(Counter : integer ; Var S : string);
  21.     External ;
  22.  
  23.  procedure Open_DO_Wind(i : integer);
  24.     External ;
  25.  
  26.  procedure WSlide_Size(i, j, k : integer);
  27.     External ;
  28.  
  29.  procedure Do_Close_Window( Module : integer ) ;
  30.     External ;
  31.  
  32.  procedure Trail_Sp( Var S : Name ) ;
  33.     External ;
  34.  
  35.  procedure Alert_Box( L1, L2, L3, L4, L5 : integer ;
  36.                       S1, S2, S3 : string ; n : integer ;
  37.                      var Result : integer ) ;
  38.     External ;
  39.  
  40.  procedure Val(S : string ; Var Result : integer ; Var Flag : Boolean);
  41.     External ;
  42.  
  43.  procedure Draw_Names;
  44.     External ;
  45.  
  46.  procedure Draw_Numbers;
  47.     External ;
  48.  
  49.  
  50.  procedure Find_Alpha( AlphName : Name ; Var Last_Name_Char : integer ) ;
  51.  
  52.    var
  53.        Temp      : char;
  54.        Space,
  55.        i,
  56.        letter    : integer ;
  57.        Last_Char,
  58.        Alph_Pos  : string ;
  59.        the, a    : string;
  60.  
  61.  
  62.    begin
  63.      Trail_Sp(AlphName);
  64.  
  65.      the := 'The ';
  66.      a   := 'A ';
  67.  
  68.      i := Pos(the, AlphName);
  69.      if i = 1 then
  70.         Delete(AlphName,1,4)
  71.      else
  72.         begin
  73.           i := Pos(a, AlphName);
  74.           if i = 1 then
  75.              Delete(AlphName,1,2);
  76.         end;
  77.  
  78.      letter := -1;
  79.      Alph_Pos := Copy(AlphName, 1, 1);
  80.  
  81.      for i := $41 to $5A do                       { upper case letter }
  82.          begin
  83.            Temp := chr(i);
  84.            if Temp = Alph_Pos then letter := i - $41;
  85.          end;
  86.      if letter < 0 then
  87.         for i := $61 to $7A do              { lower case letter }
  88.             begin
  89.               Temp := chr(i);
  90.               if Temp = Alph_Pos then letter := i - $61;
  91.              end;
  92.      if letter < 0 then letter := 26;       { non-letter first character }
  93.      Last_Name_Char := letter;
  94.    end;
  95.  
  96.  
  97.  
  98.  procedure Compare_Names(New_Name, File_Name : Name ; Var Add : boolean);
  99.  
  100.   var
  101.       i : integer;
  102.       the, a : string;
  103.  
  104.    begin
  105.      the := 'The ';
  106.      a   := 'A ';
  107.  
  108.      Len := Length(New_Name);
  109.      i   := Pos(the, New_Name);
  110.      if (i = 1) AND (Len > 4) then
  111.         Delete(New_Name,1,4)
  112.      else
  113.         begin
  114.           Len := Length(New_Name);
  115.           i   := Pos(a, New_Name);
  116.           if (i = 1) AND (Len > 2) then
  117.              Delete(New_Name,1,2);
  118.         end;
  119.  
  120.      Len := Length(File_Name);
  121.      i   := Pos(the, File_Name);
  122.      if (i = 1) AND (Len > 4) then
  123.         Delete(File_Name,1,4)
  124.      else
  125.         begin
  126.           Len := Length(File_Name);
  127.           i   := Pos(a, File_Name);
  128.           if (i = 1) AND (Len > 2) then
  129.              Delete(File_Name,1,2);
  130.         end;
  131.  
  132.      if New_Name > File_Name then Add := false
  133.      else
  134.         Add := true;
  135.    end;
  136.  
  137.  
  138.  procedure Set_Order(Cur_Tape : integer);
  139.  
  140.   var
  141.      i,
  142.      Next_Rec,
  143.      Prev_Rec,
  144.      Current_Rec : integer ;
  145.  
  146.   begin
  147.     Tape_Delete[Cur_Tape] := false;
  148.     Next_Rec    := VCR_Order[1,0];
  149.     Prev_Rec    := VCR_Order[2,0];
  150.     Current_Rec := Cur_Tape;
  151.  
  152.     if Next_Rec = 0 then                  { First Record stored }
  153.        begin
  154.          VCR_Order[1,0] := Cur_Tape;
  155.          VCR_Order[2,0] := Cur_Tape;
  156.        end
  157.     else
  158.        begin
  159.          if VCR_Tape[0,Cur_Tape] < VCR_Tape[0,Next_Rec] then
  160.             begin                                 { Add before first record }
  161.               VCR_Order[1,Cur_Tape] := Next_Rec;
  162.               VCR_Order[1,0]        := Cur_Tape;
  163.               VCR_Order[2,Next_Rec] := Cur_Tape;
  164.             end
  165.          else
  166.             begin
  167.               if VCR_Tape[0,Cur_Tape] >= VCR_Tape[0,Prev_Rec] then
  168.                  begin                             { Add after last record }
  169.                    VCR_Order[1,Prev_Rec] := Cur_Tape;
  170.                    VCR_Order[2,Cur_Tape] := Prev_Rec;
  171.                    VCR_Order[2,0]        := Cur_Tape;
  172.                  end
  173.               else
  174.                  repeat                { Search through list to Sort }
  175.                    Current_Rec := Next_Rec;
  176.                    Next_Rec    := VCR_Order[1,Current_Rec];
  177.                    Prev_Rec    := VCR_Order[2,Current_Rec];
  178.                    if VCR_Tape[0,Cur_Tape] < VCR_Tape[0,Next_Rec] then
  179.                       begin
  180.                         VCR_Order[1,Current_Rec] := Cur_Tape;
  181.                         VCR_Order[2,Next_Rec]    := Cur_Tape;
  182.                         VCR_Order[1,Cur_Tape]    := Next_Rec;
  183.                         VCR_Order[2,Cur_Tape]    := Current_Rec;
  184.                         Next_Rec := 0;
  185.                       end;
  186.                  until Next_Rec = 0;
  187.             end;
  188.        end;
  189.   end;
  190.  
  191.  
  192.  procedure Set_Pointer( New_Rec : integer);
  193.  
  194.   var
  195.      Next_Rec,
  196.      Prev_Rec,
  197.      Current_Rec,
  198.      Offset        : integer;
  199.      Add           : boolean;
  200.  
  201.   begin
  202.     Movie_Delete[New_Rec] := false;
  203.     Find_Alpha(VCR_Name[New_Rec], Offset);
  204.     Next_Rec    := VCR_Point[1,Offset];
  205.     Prev_Rec    := VCR_Point[2,Offset];
  206.     Current_Rec := VCR_Point[1,Offset];
  207.  
  208.     if Next_Rec = 0 then                  { First Record stored }
  209.        begin
  210.          VCR_Point[1,Offset] := New_Rec;
  211.          VCR_Point[2,Offset] := New_Rec;
  212.        end
  213.     else
  214.        begin
  215.          Compare_Names(VCR_Name[New_Rec], VCR_Name[Next_Rec], Add);
  216.          if Add then                      { Add before first record }
  217.             begin
  218.               VCR_Next[2,Next_Rec]:= New_Rec;
  219.               VCR_Next[1,New_Rec] := Next_Rec;
  220.               VCR_Point[1,Offset] := New_Rec;
  221.             end
  222.          else
  223.             begin
  224.               Compare_Names(VCR_Name[New_Rec], VCR_Name[Prev_Rec], Add);
  225.               if NOT Add then             { Add after last record }
  226.                  begin
  227.                    VCR_Next[1,Prev_Rec]:= New_Rec;
  228.                    VCR_Next[2,New_Rec] := Prev_Rec;
  229.                    VCR_Point[2,Offset] := New_Rec;
  230.                  end
  231.               else
  232.                  repeat             { Search through list to alphabatize }
  233.                    Current_Rec := Next_Rec;
  234.                    Next_Rec    := VCR_Next[1,Current_Rec];
  235.                    Prev_Rec    := VCR_Next[2,Current_Rec];
  236.                    Compare_Names(VCR_Name[New_Rec],
  237.                                 VCR_Name[Current_Rec], Add);
  238.                    if Add then
  239.                       begin
  240.                         VCR_Next[1,Prev_Rec]    := New_Rec;
  241.                         VCR_Next[2,Current_Rec] := New_Rec;
  242.                         VCR_Next[1,New_Rec]     := Current_Rec;
  243.                         VCR_Next[2,New_Rec]     := Prev_Rec;
  244.                       end;
  245.                  until Add OR (Next_Rec = 0);
  246.             end;
  247.        end;
  248.   end;
  249.  
  250.  
  251.  
  252.   procedure Count_Str( Counter : integer ; Var S : string);
  253.  
  254.     begin
  255.       if (Counter > 0) AND (Counter <= Max_Movies) then
  256.          DateStr(VCR_Count[Counter], S);
  257.     end;
  258.  
  259.  
  260.   procedure Ret_Record;
  261.  
  262.     var
  263.         i,
  264.         Y_Line,
  265.         Y_Limit,
  266.         Tape_No  : integer ;
  267.  
  268.     begin
  269.       Name_Select := 0;
  270.       Tape_Select := 0;
  271.       if (Gem_Result.X_Mouse > x0) AND
  272.          (Gem_Result.X_Mouse < x0 + w0 - 5) then
  273.          begin
  274.            Y_Line := ((Gem_Result.Y_Mouse - y0 - 2 * Resolution) DIV
  275.                               (9 * Resolution)) + 1;
  276.            if Dsply_Name < 5 then
  277.               Y_Limit := Dsply_Name
  278.            else
  279.               Y_Limit := 5;
  280.            if (Y_Line > 0) and (Y_Line < Y_Limit + 1) then
  281.               begin
  282.                 Name_Select := Output_Name[Y_Line + Name_Offset];
  283.                 Tape_No := VCR_TapeNo[Name_Select];
  284.  
  285.                 for i := 1 to 2 do
  286.                     if VCR_Check[i,Tape_No] then
  287.                        begin
  288.                          Input_String[i] := Check;
  289.                          VCR_Check[i,Tape_Current] := true;
  290.                        end
  291.                     else
  292.                        begin
  293.                          Input_String[i] := Sp;
  294.                          VCR_Check[i,Tape_Current] := false;
  295.                        end;
  296.  
  297.                 DateStr(VCR_Tape[0,Tape_No], Input_String[3]);
  298.  
  299.                 Input_String[4] := VCR_Name[VCR_Tape[1,Tape_No]];
  300.                 Count_Str(VCR_Tape[1,Tape_No], Input_String[5]);
  301.  
  302.                 Input_String[6] := VCR_Name[VCR_Tape[2,Tape_No]];
  303.                 Count_Str(VCR_Tape[2,Tape_No], Input_String[7]);
  304.  
  305.                 Input_String[8] := VCR_Name[VCR_Tape[3,Tape_No]];
  306.                 Count_Str(VCR_Tape[3,Tape_No], Input_String[9]);
  307.  
  308.                 Input_String[10] := VCR_Name[VCR_Tape[4,Tape_No]];
  309.                 Count_Str(VCR_Tape[4,Tape_No],Input_String[11]);
  310.  
  311.                 Input_String[12] := VCR_Name[VCR_Tape[5,Tape_No]];
  312.                 Count_Str(VCR_Tape[5,Tape_No],Input_String[13]);
  313.  
  314.                 Input_String[14] := VCR_Name[VCR_Tape[6,Tape_No]];
  315.                 Count_Str(VCR_Tape[6,Tape_No],Input_String[15]);
  316.  
  317.                 VCR_Retrieve := True;
  318.                 if Wind_Handle[1] < 0 then
  319.                    Open_DO_Wind(1)
  320.                 else
  321.                    Bring_To_Front(Wind_Handle[1]);
  322.  
  323.               end;
  324.          end;
  325.     end;
  326.  
  327.  
  328.   procedure Ret_Tape;
  329.  
  330.     var
  331.         i,
  332.         Y_Limit,
  333.         Tape_No,
  334.         Y_Line  : integer ;
  335.  
  336.     begin
  337.       Name_Select := 0;
  338.       Tape_Select := 0;
  339.       if (Gem_Result.X_Mouse > x0) AND
  340.          (Gem_Result.X_Mouse < x0 + w0 - 5) then
  341.          begin
  342.            Y_Line := ((Gem_Result.Y_Mouse - y0 - 2 * Resolution) DIV
  343.                               (9 * Resolution)) + 1;
  344.            if Dsply_Tape < 15 then
  345.               Y_Limit := Dsply_Tape
  346.            else
  347.               Y_Limit := 15;
  348.            if (Y_Line > 0) and (Y_Line < Y_Limit + 1) then
  349.               begin
  350.                 Tape_Select := Y_Line + Tape_Offset;
  351.                 Tape_No     := Output_Tape[Tape_Select];
  352.                 Name_Select := VCR_Tape[1,Tape_No];
  353.  
  354.                 for i := 1 to 2 do
  355.                     if VCR_Check[i,Tape_No] then
  356.                        begin
  357.                          Input_String[i] := Check;
  358.                          VCR_Check[i,Tape_Current] := true;
  359.                        end
  360.                     else
  361.                        begin
  362.                          Input_String[i] := Sp;
  363.                          VCR_Check[i,Tape_Current] := false;
  364.                        end;
  365.  
  366.                 DateStr(VCR_Tape[0,Tape_No], Input_String[3]);
  367.  
  368.                 Input_String[4] := VCR_Name[VCR_Tape[1,Tape_No]];
  369.                 Count_Str(VCR_Tape[1,Tape_No], Input_String[5]);
  370.  
  371.                 Input_String[6] := VCR_Name[VCR_Tape[2,Tape_No]];
  372.                 Count_Str(VCR_Tape[2,Tape_No], Input_String[7]);
  373.  
  374.                 Input_String[8] := VCR_Name[VCR_Tape[3,Tape_No]];
  375.                 Count_Str(VCR_Tape[3,Tape_No], Input_String[9]);
  376.  
  377.                 Input_String[10] := VCR_Name[VCR_Tape[4,Tape_No]];
  378.                 Count_Str(VCR_Tape[4,Tape_No],Input_String[11]);
  379.  
  380.                 Input_String[12] := VCR_Name[VCR_Tape[5,Tape_No]];
  381.                 Count_Str(VCR_Tape[5,Tape_No],Input_String[13]);
  382.  
  383.                 Input_String[14] := VCR_Name[VCR_Tape[6,Tape_No]];
  384.                 Count_Str(VCR_Tape[6,Tape_No],Input_String[15]);
  385.  
  386.                 VCR_Retrieve := True;
  387.                 if Wind_Handle[1] < 0 then
  388.                    Open_DO_Wind(1)
  389.                 else
  390.                    Bring_To_Front(Wind_Handle[1]);
  391.               end;
  392.          end;
  393.     end;
  394.  
  395.  
  396.   procedure Get_MovieRec(First_Letter : integer);
  397.  
  398.     var
  399.         i, Next_Rec  : integer ;
  400.         L_Offset,
  401.         L_Slide      : long_integer;
  402.  
  403.     begin
  404.        if First_Letter < 0 then
  405.           Dsply_Name := 0
  406.        else
  407.           begin
  408.             Next_Rec := VCR_Point[1,First_Letter];
  409.             i := 0;
  410.             While Next_Rec <> 0 do
  411.                 begin
  412.                   i := i + 1;
  413.                   Output_Name[i] := Next_Rec;
  414.                   Next_Rec := VCR_Next[1,Next_Rec];
  415.                 end;
  416.             Dsply_Name := i;
  417.           end;
  418.  
  419.        if Name_Offset + 5 > Dsply_Name then
  420.           Name_Offset := Dsply_Name - 5;
  421.        if Name_Offset < 0 then Name_Offset := 0;
  422.  
  423.        L_Slide  := Slide_Pos;
  424.        L_Offset := Name_Offset;
  425.  
  426.        if Dsply_Name <= 5 then
  427.           L_Slide := 1
  428.        else
  429.           L_Slide := (L_Offset * 1000) DIV (Dsply_Name - 5);
  430.  
  431.        Slide_Pos   := int(L_Slide);
  432.        Name_Offset := int(L_Offset);
  433.        if Slide_Pos < 1 then Slide_Pos := 1;
  434.  
  435.        WSlide_Size(5, Dsply_Name, 4);
  436.        Wind_Set(Wind_Handle[4], WF_VSlide, Slide_Pos, Dummy, Dummy, Dummy);
  437.  
  438.        if Module <> Wind_Handle[4] then
  439.           Set_Clip(0,0,640,400);
  440.  
  441.        Draw_Names;
  442.     end;
  443.  
  444.  
  445.   procedure Get_TapeNo;
  446.  
  447.     var
  448.         i, Next_Rec  : integer ;
  449.         L_Offset,
  450.         L_Slide      : long_integer;
  451.  
  452.     begin
  453.        Next_Rec := VCR_Order[1,0];
  454.        i := 0;
  455.        While Next_Rec <> 0 do
  456.            begin
  457.              i := i + 1;
  458.              Output_Tape[i] := Next_Rec;
  459.              Next_Rec := VCR_Order[1,Next_Rec];
  460.            end;
  461.        Dsply_Tape  := i;
  462.  
  463.        if Tape_Offset + 15 > Dsply_Tape then
  464.           Tape_Offset := Dsply_Tape - 15;
  465.        if Tape_Offset < 0 then Tape_Offset := 0;
  466.  
  467.        L_Slide  := Slide_Pos;
  468.        L_Offset := Tape_Offset;
  469.  
  470.        if Dsply_Tape <= 15 then
  471.           L_Slide := 1
  472.        else
  473.           L_Slide := (L_Offset * 1000) DIV (Dsply_Tape - 15);
  474.  
  475.        Slide_Pos   := int(L_Slide);
  476.        Tape_Offset := int(L_Offset);
  477.        if Slide_Pos < 1 then Slide_Pos := 1;
  478.  
  479.        WSlide_Size(15, Dsply_Tape, 5);
  480.        Wind_Set(Wind_Handle[5], WF_VSlide, Slide_Pos, Dummy, Dummy, Dummy);
  481.  
  482.        if Module <> Wind_Handle[5] then
  483.           Set_Clip(0,0,640,400);
  484.  
  485.        Draw_Numbers;
  486.     end;
  487.  
  488.  
  489.   procedure LetterSelect(First_Letter : integer ) ;
  490.  
  491.    var
  492.        i,
  493.        Last_Char,
  494.        Next_Rec  : integer ;
  495.        c         : char;
  496.  
  497.     begin
  498.       Hide_Mouse;
  499.       Work_Rect(Wind_Handle[3],x0,y0,w0,h0);
  500.       Set_Clip(x0,y0,w0,h0);
  501.  
  502.       for i := 0 to 26 do
  503.           if VCR_Inverse[i] then
  504.              begin
  505.                if i = 26 then
  506.                   c := chr($2A)
  507.                else
  508.                   c := chr($41 + i);
  509.                VCR_Inverse[i] := false;
  510.                Draw_String(342 - 13 * (25 - i),
  511.                           (56 - i) * Resolution, c);
  512.              end;
  513.  
  514.       Text_Style($02);
  515.         if First_Letter = 26 then
  516.            c := chr($2A)
  517.         else
  518.            c := chr($41 + First_Letter);
  519.         Draw_String(342 - 13 * (25 - First_Letter),
  520.                    (56 - First_Letter) * Resolution, c);
  521.       Text_Style($00);
  522.       Show_Mouse;
  523.  
  524.       VCR_Inverse[First_Letter] := true;
  525.  
  526.       if Module <> Wind_Handle[4] then
  527.          Bring_To_Front(Wind_Handle[4]);
  528.  
  529.       Get_MovieRec(First_Letter);
  530.   end;
  531.  
  532.  
  533.   procedure ClearSelect;
  534.  
  535.    var
  536.       i, j, k       : integer;
  537.       StartLoop,
  538.       EndLoop       : integer;
  539.  
  540.     begin
  541.       if Module = Wind_Handle[1] then
  542.          begin
  543.            VCR_Check[1,Tape_Current] := false;
  544.            VCR_Check[2,Tape_Current] := false;
  545.            StartLoop := 1;
  546.            EndLoop   := 15;
  547.         end
  548.       else 
  549.          StartLoop := 0;
  550.  
  551.       if StartLoop > 0 then
  552.          for i := StartLoop to EndLoop do
  553.              begin
  554.                Input_String[i] := No_Sp;
  555.                for j := 0 to XY_VCR[3,i] do
  556.                    Draw_String(x0 + XY_VCR[1,i] + j * 8,
  557.                                y0 + XY_VCR[2,i] * Resolution, Sp);
  558.              end;
  559.       Prev_Module := -25;
  560.     end;
  561.  
  562.  
  563.   procedure Save_VCR;
  564.  
  565.    var
  566.        i, j,
  567.        Save_Movie,
  568.        Save_Tape   : integer;
  569.  
  570.     begin
  571.       Len := Length(Input_String[4]);
  572.       if (VCR_Current > Max_Movies - 60) AND (Len > 0) then
  573.          Alert_Box(0,4,0,5,0,'Continue',No_Sp,No_Sp,1,i)
  574.       else
  575.          if Len > 0 then
  576.             begin
  577.               Save_Tape := 0;
  578.               for i := 1 to Tape_Current do
  579.                   if Tape_Delete[i] then
  580.                      begin
  581.                        Save_Tape := Tape_Current;
  582.                        Tape_Current := i;
  583.                        i := Max_Movies;
  584.                      end;
  585.  
  586.               for i := 1 to 2 do
  587.                   if Input_String[i] = Check then
  588.                      VCR_Check[i,Tape_Current] := true
  589.                   else
  590.                      VCR_Check[i,Tape_Current] := false;
  591.  
  592.               Val(Input_String[3], VCR_Tape[0,Tape_Current], Flag);
  593.               Set_Order(Tape_Current);
  594.               for i := 0 to 5  do
  595.                   begin
  596.                     Len := Length(Input_String[2 * i + 4]);
  597.                     if Len > 0 then
  598.                        begin
  599.                          Save_Movie := 0;
  600.                          for j := 1 to VCR_Current do
  601.                              if Movie_Delete[j] then
  602.                                 begin
  603.                                   Save_Movie := VCR_Current;
  604.                                   VCR_Current := j;
  605.                                   j := Max_Movies;
  606.                                 end;
  607.                          VCR_Name[VCR_Current] := Input_String[2 * i + 4];
  608.                          Val(Input_String[2*i+5],VCR_Count[VCR_Current], Flag);
  609.                          VCR_TapeNo[VCR_Current] := Tape_Current;
  610.                          VCR_Tape[i + 1, Tape_Current] := VCR_Current;
  611.                          Set_Pointer(VCR_Current);
  612.                          if Save_Movie > 0 then
  613.                             VCR_Current := Save_Movie
  614.                          else
  615.                             VCR_Current := VCR_Current + 1;
  616.                        end;
  617.                   end;
  618.               if Save_Tape > 0 then
  619.                  Tape_Current := Save_Tape
  620.               else
  621.                  Tape_Current := Tape_Current + 1;
  622.             end;
  623.     end;
  624.  
  625.  
  626.   procedure SaveSelect;
  627.  
  628.    var
  629.        i, j,
  630.        SlashPos : integer;
  631.        FileName : Path_Name;
  632.  
  633.  
  634.     begin
  635.       if Module = Wind_Handle[1] then
  636.          begin
  637.            Save_VCR;
  638.            ClearSelect;
  639.          end;
  640.     end;
  641.  
  642.  
  643.   procedure AbortSelect;
  644.  
  645.     var
  646.         i : integer;
  647.  
  648.     begin
  649.       if Module = Wind_Handle[1] then
  650.          if VCR_Retrieve then
  651.             VCR_Retrieve := false;
  652.       ClearSelect;
  653.       if Module = Wind_Handle[1] then
  654.          Do_Close_Window(Module);
  655.     end;
  656.  
  657.  
  658.   procedure ExitSelect;
  659.  
  660.     begin
  661.       SaveSelect;
  662.       AbortSelect;
  663.     end;
  664.  
  665.  
  666.   procedure DeleteSelect(Delete_Rec : integer);
  667.   
  668.     var
  669.         i : integer;
  670.         FirstLetter : integer;
  671.  
  672.     begin
  673.       if Module = Wind_Handle[1] then
  674.          begin
  675.            Find_Alpha(VCR_Name[Delete_Rec], FirstLetter);
  676.  
  677.            if VCR_Next[1,Delete_Rec] = 0 then    { Reverse Pointer }
  678.               VCR_Point[2,FirstLetter] := VCR_Next[2,Delete_Rec]
  679.            else
  680.               VCR_Next[2,VCR_Next[1,Delete_Rec]] := VCR_Next[2,Delete_Rec];
  681.  
  682.            if VCR_Next[2,Delete_Rec] = 0 then          { Forward Pointer }
  683.               VCR_Point[1,FirstLetter] := VCR_Next[1,Delete_Rec]
  684.            else
  685.               VCR_Next[1,VCR_Next[2,Delete_Rec]] := VCR_Next[1,Delete_Rec];
  686.  
  687.            VCR_Next[1,Delete_Rec] := 0;
  688.            VCR_Next[2,Delete_Rec] := 0;
  689.  
  690.            Movie_Delete[Delete_Rec] := True;
  691.          end;
  692.  
  693.     end;
  694.  
  695.  
  696.   procedure Delete_Rec(Tape_No : integer);
  697.  
  698.    var
  699.       i, Current_Rec : integer;
  700.  
  701.     begin
  702.       Tape_Delete[Tape_No] := true;
  703.  
  704.       VCR_Check[1,Tape_No] := false;
  705.       VCR_Check[2,Tape_No] := false;
  706.  
  707.       if VCR_Order[1,Tape_No] = 0 then             { Set Reverse Pointer }
  708.          VCR_Order[2,0] := VCR_Order[2,Tape_No]
  709.       else
  710.          VCR_Order[2,VCR_Order[1,Tape_No]] := VCR_Order[2,Tape_No];
  711.  
  712.       if VCR_Order[2,Tape_No] = 0 then             { Set Forward Pointer }
  713.          VCR_Order[1,0] := VCR_Order[1,Tape_No]
  714.       else
  715.          VCR_Order[1,VCR_Order[2,Tape_No]] := VCR_Order[1,Tape_No];
  716.  
  717.       VCR_Order[1,Tape_No] := 0;
  718.       VCR_Order[2,Tape_No] := 0;
  719.  
  720.       for i := 0 to 5 do
  721.           begin
  722.             Current_Rec := VCR_Tape[i + 1, Tape_No];
  723.  
  724.             if Current_Rec > 0 then
  725.                DeleteSelect(Current_Rec);
  726.           end;
  727.  
  728.       for i := 0 to 6 do
  729.           VCR_Tape[i,Tape_No] := 0;
  730.     end;
  731.  
  732.  
  733.   procedure EditSave;
  734.  
  735.    var
  736.       Tape_No : integer;
  737.  
  738.     begin
  739.       if Name_Select > 0 then
  740.          Tape_No := VCR_TapeNo[Name_Select]
  741.       else
  742.          Tape_No := Output_Tape[Tape_Select];
  743.       Delete_Rec(Tape_No);
  744.       Save_VCR;
  745.       ClearSelect;
  746.       VCR_Retrieve := false;
  747.     end;
  748.  
  749.  
  750. BEGIN
  751. END.
  752.